package com.zhang.novel.service;

import com.zhang.novel.core.bean.UserDetails;
import com.zhang.novel.entity.User;
import com.zhang.novel.entity.UserBuyRecord;
import com.zhang.novel.form.UserForm;
import com.zhang.novel.vo.BookReadHistoryVO;
import com.zhang.novel.vo.BookShelfVO;
import com.zhang.novel.vo.UserFeedbackVO;

import java.util.List;

public interface UserService {
    /**
     * 登录
     *
     * @param form
     * @return
     */
    UserDetails login(UserForm form);

    /**
     * 注冊
     *
     * @param form
     * @return
     */
    UserDetails register(UserForm form);

    /**
     * 查询小说是否已加入书架
     *
     * @param userId
     * @param bookId
     * @return
     */
    Boolean queryIsInShelf(Long userId, Long bookId);

    /**
     * 加入书架
     *
     * @param userId
     * @param bookId
     */
    void addToBookShelf(Long userId, Long bookId, Long preContentId);

    /**
     * 移出书架
     *
     * @param userId
     * @param bookId
     */
    void removeFromBookShelf(Long userId, Long bookId);

    /**
     * 分页查询书架
     *
     * @param userId
     * @param page
     * @param pageSize
     * @return
     */
    List<BookShelfVO> listBookShelfByPage(Long userId, int page, int pageSize);

    /**
     * 分页查询阅读记录
     *
     * @param userId
     * @param page
     * @param pageSize
     * @return
     */
    List<BookReadHistoryVO> listReadHistoryByPage(Long userId, int page, int pageSize);

    /**
     * 添加阅读记录
     *
     * @param userId
     * @param bookId
     * @param preContentId
     */
    void addReadHistory(Long userId, Long bookId, Long preContentId);

    /**
     * 添加反馈
     *
     * @param userId
     * @param content
     */
    void addFeedBack(Long userId, String content);

    /**
     * 分页查询我的反馈列表
     *
     * @param userId
     * @param page
     * @param pageSize
     * @return
     */
    List<UserFeedbackVO> listUserFeedBackByPage(Long userId, int page, int pageSize);

    /**
     * 查询个人信息
     *
     * @param userId
     * @return
     */
    User userInfo(Long userId);

    /**
     * 更新个人信息
     *
     * @param userId
     * @param user
     */
    void updateUserInfo(Long userId, User user);

    /**
     * 更新密码
     *
     * @param userId
     * @param oldPassword
     * @param newPassword
     */
    void updatePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 购买小说章节
     *
     * @param userId
     * @param buyRecord
     */
    void buyBookIndex(Long userId, UserBuyRecord buyRecord);

    /**
     * 增加用户余额
     * @param userId
     * @param totalAmount
     */
    void addAmount(Long userId, int totalAmount);

    Boolean queryIsBuyBookIndex(Long userId, Long bookIndexId);
}
